home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- #
- # This is the update-modules script for Debian GNU/Linux.
- # Copyright 1998-2001 Wichert Akkerman <wakkerma@debian.org>
- # Licensed under the GNU GPL, version 2
- #
-
- MODCONFFILE=/etc/modules.conf
- MODCONFTMPFILE="${MODCONFFILE}.$$"
- CHANDEVFILE=/etc/chandev.conf
- CHANDEVTMPFILE="${CHANDEVFILE}.$$"
-
- ARCHDIR=/etc/modutils/arch
- HEADER="### This file is automatically generated by update-modules"
-
- set -e
-
- if [ "$1" = "force" ] ; then
- force=1
- else
- force=
- fi
-
- # Reset the sorting order since we depend on it
- LC_COLLATE=C
- export LC_COLLATE
-
- depdir()
- {
- dep=`grep '[[:space:]]*depfile' "${MODCONFFILE}" | tail -n 1 | sed -e 's/depfile=//' -e 's,/[^/]*$,,'`
- if [ -z "$dep" ] ; then
- dep="/lib/modules/`uname -r`"
- fi
-
- echo $dep
- }
-
- arch() {
- local model=`uname -m`
- case $model in
- i[0-9]86) model=i386; ;;
- sun4u) model=sparc64; ;;
- arm*) model=arm; ;;
- ppc) model=powerpc; ;;
- esac
- echo $model
- }
-
- archmodel() {
- local arch=`arch`
- local model=""
- if [ $arch = "m68k" ]; then
- if [ -f /proc/hardware ]; then
- model=`sed -ne 's/^Model:[[:space:]]*//p' /proc/hardware`
- case $model in
- Atari*) model="atari"; ;;
- Amiga*) model="amiga"; ;;
- Macintosh*) model="mac"; ;;
- Motorola*) model="MVME"; ;;
- *) model="generic"; ;;
- esac
- model=".${model}"
- else
- echo "/proc/hardware does not exist, assuming general m68k system"
- model=".generic"
- fi
- elif [ $arch = "powerpc" ]; then
- if [ -f /proc/cpuinfo ]; then
- model=`sed -ne 's/^machine[[:space:]]*:[[:space:]]*//p' /proc/cpuinfo`
- case $model in
- Amiga*) model="apus"; ;;
- Power*) model="pmac"; ;;
- *) model="generic"; ;;
- esac
- model=".${model}"
- else
- echo "/proc/cpuinfo does not exist, assuming general powerpc system"
- model=".generic"
- fi
- fi
- echo "${arch}${model}"
- }
-
- checkoverwrite() {
- local cfgfile="$1"
-
- if [ -f "$cfgfile" ]; then
- if ! sed -ne 1p "$cfgfile" | grep -q "^$HEADER" ; then
- echo "Error: the current $cfgfile is not automatically generated." >&2
- if [ -z "$force" ]; then
- echo "Use \"update-modules force\" to force (re)generation."
- exit 1
- else
- echo "force specified, (re)generating file anyway."
- fi
- fi
- fi
- }
-
- createfile() {
- cat <<EOF > "$1"
- $HEADER"
- #
- # Please do not edit this file directly. If you want to change or add
- # anything please take a look at the files in /etc/modutils and read
- # the manpage for update-modules.
- #
- EOF
- }
-
- addfile() {
- local src="$1"
- local tgt="$2"
-
- echo "### update-modules: start processing $src" >> "$tgt"
- if [ -x "$src" ]; then
- if ! "$src" >> "$tgt" ; then
- echo "Error while executing $src, aborting" >&2
- exit 1
- fi
- else
- cat "$src" >> "$tgt"
- fi
- cat <<EOF >> "$tgt"
-
- ### update-modules: end processing $cfg
-
- EOF
- }
-
-
- if [ "`uname -m`" = "s390" ] ; then
- dochandev=1
- fi
-
- checkoverwrite "$MODCONFFILE"
- [ "$dochandev" ] && checkoverwrite "$CHANDEVFILE"
-
- if [ 0 -ne "`id -u`" ]; then
- echo "You have to be root to do this." >&2
- exit 2
- fi
-
- model=`archmodel`
- oldmodel=$model
-
- while [ ! -f "${ARCHDIR}/${model}" ]; do
- oldmodel=$model
- model=`echo $oldmodel | sed -e 's/\.[^.]\+//'`
- if [ "$model" = "$oldmodel" ]; then
- break
- fi
- echo "Configuration for $oldmodel not found, trying $model"
- done
-
- CONF="${ARCHDIR}/${model}"
-
- if [ ! -f "$CONF" ]; then
- echo "Architecture-specific modutils configuration not found, using defaults"
- CONF="${ARCHDIR}/generic"
- fi
-
- [ -e "$MODCONFFILE" ] && cp -f "$MODCONFFILE" "${MODCONFFILE}.old"
- [ "$dochandev" -a -e "$CHANDEVFILE" ] && cp -f "$CHANDEVFILE" "${CHANDEVFILE}.old"
-
- createfile "$MODCONFTMPFILE"
- [ "$dochandev" ] && createfile "$CHANDEVTMPFILE"
-
- for cfg in /etc/modutils/* $CONF ; do
- if [ -f "$cfg" ]; then # this check is necesarry to skip /etc/modutils/archs
- if [ "$dochandev" ] && echo $cfg | grep -q '\.chandev$' ; then
- addfile "$cfg" "$CHANDEVTMPFILE"
- elif ! echo $cfg | grep -q '\(\.dpkg-[a-z]*\|~\)$' ; then
- addfile "$cfg" "$MODCONFTMPFILE"
- fi
- fi
- done
-
- mv "$MODCONFTMPFILE" "$MODCONFFILE"
- [ "$dochandev" ] && mv "$CHANDEVTMPFILE" "$CHANDEVFILE"
-
- # We also call depmod here to stop insmod from complaining that modules.conf
- # is more recent then modules.dep
- #
- if [ -d "`depdir`" -a -f /proc/modules ]
- then
- depmod -a || true
- fi
-
- exit 0
-
-